home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / Make / source / filedef.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-27  |  5.3 KB  |  126 lines

  1. /* Definition of target file data structures for GNU Make.
  2. Copyright (C) 1988,89,90,91,92,93,94,97 Free Software Foundation, Inc.
  3. This file is part of GNU Make.
  4.  
  5. GNU Make is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2, or (at your option)
  8. any later version.
  9.  
  10. GNU Make is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with GNU Make; see the file COPYING.  If not, write to
  17. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  18.  
  19. /* Structure that represents the info on one file
  20.    that the makefile says how to make.
  21.    All of these are chained together through `next'.  */
  22.  
  23. struct file
  24.   {
  25.     struct file *next;
  26.     char *name;
  27.     char *hname;                /* Hashed filename */
  28.     char *vpath;                /* VPATH/vpath pathname */
  29.     struct dep *deps;
  30.     struct commands *cmds;    /* Commands to execute for this target.  */
  31.     int command_flags;        /* Flags OR'd in for cmds; see commands.h.  */
  32.     char *stem;            /* Implicit stem, if an implicit
  33.                        rule has been used */
  34.     struct dep *also_make;    /* Targets that are made by making this.  */
  35.     time_t last_mtime;        /* File's modtime, if already known.  */
  36.     struct file *prev;        /* Previous entry for same file name;
  37.                    used when there are multiple double-colon
  38.                    entries for the same file.  */
  39.  
  40.     /* File that this file was renamed to.  After any time that a
  41.        file could be renamed, call `check_renamed' (below).  */
  42.     struct file *renamed;
  43.  
  44.     /* List of variable sets used for this file.  */
  45.     struct variable_set_list *variables;
  46.  
  47.     /* Immediate dependent that caused this target to be remade,
  48.        or nil if there isn't one.  */
  49.     struct file *parent;
  50.  
  51.     /* For a double-colon entry, this is the first double-colon entry for
  52.        the same file.  Otherwise this is null.  */
  53.     struct file *double_colon;
  54.  
  55.     short int update_status;    /* Status of the last attempt to update,
  56.                    or -1 if none has been made.  */
  57.  
  58.     enum            /* State of the commands.  */
  59.       {        /* Note: It is important that cs_not_started be zero.  */
  60.     cs_not_started,        /* Not yet started.  */
  61.     cs_deps_running,    /* Dep commands running.  */
  62.     cs_running,        /* Commands running.  */
  63.     cs_finished        /* Commands finished.  */
  64.       } command_state ENUM_BITFIELD (2);
  65.  
  66.     unsigned int precious:1;    /* Non-0 means don't delete file on quit */
  67.     unsigned int tried_implicit:1; /* Nonzero if have searched
  68.                       for implicit rule for making
  69.                       this file; don't search again.  */
  70.     unsigned int updating:1;    /* Nonzero while updating deps of this file */
  71.     unsigned int updated:1;    /* Nonzero if this file has been remade.  */
  72.     unsigned int is_target:1;    /* Nonzero if file is described as target.  */
  73.     unsigned int cmd_target:1;    /* Nonzero if file was given on cmd line.  */
  74.     unsigned int phony:1;    /* Nonzero if this is a phony file
  75.                    i.e., a dependency of .PHONY.  */
  76.     unsigned int intermediate:1;/* Nonzero if this is an intermediate file.  */
  77.     /* Nonzero, for an intermediate file,
  78.        means remove_intermediates should not delete it.  */
  79.     unsigned int secondary:1;
  80.     unsigned int dontcare:1;    /* Nonzero if no complaint is to be made if
  81.                    this target cannot be remade.  */
  82.     unsigned int ignore_vpath:1;/* Nonzero if we threw out VPATH name */
  83.   };
  84.  
  85. /* Number of intermediate files entered.  */
  86.  
  87. extern unsigned int num_intermediates;
  88.  
  89. extern struct file *default_goal_file, *suffix_file, *default_file;
  90.  
  91.  
  92. extern struct file *lookup_file (), *enter_file ();
  93. extern void remove_intermediates (), snap_deps ();
  94. extern void rename_file (), rehash_file (), file_hash_enter ();
  95. extern void set_command_state ();
  96.  
  97.  
  98. /* Return the mtime of file F (a struct file *), caching it.
  99.    The value is -1 if the file does not exist.  */
  100. #define file_mtime(f) file_mtime_1 ((f), 1)
  101. /* Return the mtime of file F (a struct file *), caching it.
  102.    Don't search using vpath for the file--if it doesn't actually exist,
  103.    we don't find it.
  104.    The value is -1 if the file does not exist.  */
  105. #define file_mtime_no_search(f) file_mtime_1 ((f), 0)
  106. extern time_t f_mtime ();
  107. #define file_mtime_1(f, v) \
  108.   ((f)->last_mtime != (time_t) 0 ? (f)->last_mtime : f_mtime ((f), v))
  109.  
  110. /* Modtime value to use for `infinitely new'.  We used to get the current time
  111.    from the system and use that whenever we wanted `new'.  But that causes
  112.    trouble when the machine running make and the machine holding a file have
  113.    different ideas about what time it is; and can also lose for `force'
  114.    targets, which need to be considered newer than anything that depends on
  115.    them, even if said dependents' modtimes are in the future.
  116.  
  117.    If time_t is unsigned, its maximum value is the same as "(time_t) -1",
  118.    so use one less than that, because -1 is used for non-existing files.  */
  119. #define NEW_MTIME \
  120.      (INTEGER_TYPE_SIGNED (time_t) \
  121.       ? INTEGER_TYPE_MAXIMUM (time_t) \
  122.       : (INTEGER_TYPE_MAXIMUM (time_t) - 1))
  123.  
  124. #define check_renamed(file) \
  125.   while ((file)->renamed != 0) (file) = (file)->renamed /* No ; here.  */
  126.